package lab03.test06;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.*;

/*6、	使用RandomAccessFile流统计一篇英文中的单词，要求如下：
        （1）一共出现了多少个英文单词。
        （2）有多少个互不相同的单词。
        （3）给出每个单词出现的频率，并将这些单词按频率大小顺序进行打印。
*/
public class Test06 {
    public static void main(String[] args) {

        String path = "D:\\hello.txt";
        RandomAccessFile randomAccessFile = null;

        Map<String, Integer> map = new HashMap<String, Integer>();//key为string value为int
        try {
            //"r":模式 读
            randomAccessFile = new RandomAccessFile(path, "rw");
            String line = null;

            int count = 0;
            while ((line = randomAccessFile.readLine()) != null) {
                count++;   //统计有几行

                //先要判断map中有没有这个key，没有直接将value赋值为1
                //如果有这个key，则将key对应的value值加1
                if (map.get(line) == null) {
                    map.put(line, 1);
                } else {
                    map.put(line, (map.get(line).intValue() + 1));
                }
            }

            System.out.println("共出现了" + count + "个单词");
            System.out.println("出现了" + map.size() + "个不同的单词");


            //这里将map.entrySet()转换成list
            List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());


            Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                @Override
                public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
            for (Map.Entry<String, Integer> entry : list) {
                System.out.println(entry.getKey() + "-->" + entry.getValue());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}